package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import to.Determinacao;
import util.HibernateUtil;
import visao.DeterminacaoVO;


public class DeterminacaoDAO {

	public ArrayList<Determinacao> buscarTodos() {

		ArrayList<Determinacao> capturaDeterminacao = new ArrayList<Determinacao>();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Determinacao.class);
			capturaDeterminacao = (ArrayList<Determinacao>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}

		return capturaDeterminacao;
	}

	public Determinacao buscarPorCodigo(Integer id) {

		Determinacao retornaTipo = new Determinacao();
		Session session = null;

		try {

			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Determinacao.class);
			criteria.add(Restrictions.idEq(id));
			retornaTipo = (Determinacao) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();
		}

		return retornaTipo;
	}

	public List<DeterminacaoVO> buscarDeterminacaoPorSolicitacao(
			Integer solicitacao) {

		StringBuilder sql = new StringBuilder();
		sql.append("select distinct d.codigo, d.descricao, ti.descricao from determinacao d inner join solicitacaodeterminacao sol on sol.id_determinacao = d.codigo inner join solicitacaodeanalise s on s.codigo = sol.solicitacao_codigo inner join amostra a on a.codigo = sol.id_amostra inner join tipodeterminacao ti on ti.codigo = d.tipoDeterminacao_codigo inner join determinacaoelemento det on det.id_determinacao = d.codigo inner join elemento e on e.codigo = det.id_elemento where s.codigo = "
				+ solicitacao);

		List<DeterminacaoVO> listaRetorno = new ArrayList<DeterminacaoVO>();

		try {

			Connection conexao = HibernateUtil.getSessionFactory()
					.openSession().connection();
			PreparedStatement comando = conexao
					.prepareStatement(sql.toString());
			ResultSet resultado = comando.executeQuery();

			while (resultado.next()) {

				DeterminacaoVO linha = new DeterminacaoVO();

				linha.setCodigo(resultado.getObject("d.codigo"));
				linha.setDeterminacao(resultado.getObject("d.descricao"));
				linha.setTipo(resultado.getObject("ti.descricao"));		
				
				listaRetorno.add(linha);

			}

			conexao.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

		return listaRetorno;
	}
}
